const express = require('express');
const jwt = require('jsonwebtoken');
const router = express.Router();
const authenticateToken = require('../middlewares/authMiddleware');
require('dotenv').config();
const secretKey = process.env.SECRET_KEY;
const {v4: uuidv4} = require('uuid'); // 引入 uuid 库
const axios = require('axios');

/* 用户登录 */
router.post('/login', (req, res) => {
    const {email, password, remember} = req.body; // 添加 remember
    const sql = 'SELECT * FROM users WHERE email = ? AND password = ?';
    conn.query(sql, [email, password], (error, results) => {
        if (error) {
            return res.status(500).send({error: '数据库错误'});
        }
        if (results.length === 0) {
            return res.status(401).send({error: '无效的邮箱或密码'});
        }
        const user = results[0];
        // 根据 remember 设置 token 的过期时间
        const expiresIn = remember ? '7d' : '24h'; // 记住我 7 天，普通登录 24 小时
        const token = jwt.sign({userId: user.id}, secretKey, {expiresIn});
        res.send({message: '登录成功', token});
    });
});

router.get('/getUserList', authenticateToken, (req, res) => {
    let {page = 1, pageSize = 10} = req.query;
    page = parseInt(page);
    pageSize = parseInt(pageSize);
    const offset = (page - 1) * pageSize; // 计算偏移量
    // 查询总数
    const countQuery = 'SELECT COUNT(*) AS count FROM users';
    conn.query(countQuery, (error, countResult) => {
        if (error) return res.json({code: 10001, message: error});
        const totalCount = countResult[0].count; // 获取总数
        // 查询分页数据
        const dataQuery = 'SELECT * FROM users LIMIT ?, ?';
        conn.query(dataQuery, [offset, pageSize], (error, results) => {
            if (error) return res.json({code: 10001, message: error});
            res.json({
                code: 200,
                data: results,
                count: totalCount, // 返回总数
                page: page, // 当前页码
                pageSize: pageSize // 每页大小
            });
        });
    });
});

// 添加用户
router.post('/addUser', (req, res) => {
    const {name, email, password} = req.body;
    if (!name || !email || !password) {
        return res.status(400).send({error: '请填写完整信息'});
    }
    // 检查表是否存在
    const checkTableSql = "SHOW TABLES LIKE 'users'";
    conn.query(checkTableSql, (err, results) => {
        if (err) {
            console.error('检查表是否存在时出错:', err);
            return res.status(500).send({error: '数据库错误'});
        }
        // 如果表不存在，则创建表
        if (results.length === 0) {
            const createTableSql = `
                CREATE TABLE users (
                    id INT AUTO_INCREMENT PRIMARY KEY,
                    name VARCHAR(255) NOT NULL,
                    email VARCHAR(255) NOT NULL UNIQUE,
                    password VARCHAR(255) NOT NULL,
                    userId VARCHAR(255) NOT NULL
                )
            `;
            conn.query(createTableSql, (err) => {
                if (err) {
                    console.error('创建表时出错:', err);
                    return res.status(500).send({error: '数据库错误'});
                }

                // 表创建成功后，继续插入数据
                insertUser(name, email, password, res);
            });
        } else {
            // 表存在，直接插入数据
            insertUser(name, email, password, res);
        }
    });
});

// 插入用户的函数
function insertUser(name, email, password, res) {
    const userId = uuidv4(); // 生成 UUID 作为用户的唯一标识
    const sql = 'INSERT INTO users (name, email, password, userId) VALUES (?, ?, ?, ?)';
    conn.query(sql, [name, email, password, userId], (error, results) => {
        if (error) {
            console.error('插入数据时出错:', error);
            return res.status(500).send({error: '插入用户时出错'});
        }
        res.send({message: '用户添加成功', userId: userId});
    });
}


// 删除用户
router.post('/deleteUser', authenticateToken, (req, res) => {
    const {id} = req.body;
    if (id !== undefined && id !== null) {
        conn.query('DELETE FROM users WHERE id = ?', [id], (error, results) => {
            if (error) {
                console.error('删除数据时出错:', error);
                return res.status(500).send({error: '数据库错误'});
            }
            res.send({message: '用户删除成功'});
        });
    } else {
        res.status(400).send({error: '缺少用户ID'});
    }
})


// 获取用户信息的接口
router.get('/userInfo', authenticateToken, (req, res) => {
    const {userId} = req.user;
    // 从数据库获取用户信息
    const sql = 'SELECT id, name, email FROM users WHERE id = ?';
    conn.query(sql, [userId], (error, results) => {
        if (error) {
            console.error('获取用户信息时出错:', error);
            return res.status(500).send({error: '数据库错误'});
        }
        if (results.length === 0) {
            return res.status(404).send({error: '用户未找到'});
        }
        // 返回用户信息
        res.send({user: results[0]});
    });
});

// 图形验证码 API
router.get('/verifycode', (req, res) => {
    const {len, type} = req.query; // 从客户端请求中获取查询参数
    // 目标 API URL 和参数
    const targetUrl = 'https://www.mxnzp.com/api/verifycode/code';
    const app_id = 'qeqbnomzmkfcwoqi'; // app_id
    const app_secret = 'SFRSQTNQazI5dUFuS25wZ3lqb0dkZz09'; // app_secret
    // 发送请求到外部 API
    axios.get(targetUrl, {
        params: {
            len: len || 5,  // 默认长度为 5
            type: type || 0, // 默认类型为 0
            app_id,
            app_secret
        }
    })
        .then(response => {
            res.json(response.data); // 返回外部 API 的响应数据
        })
        .catch(error => {
            console.error('请求转发失败:', error);
            res.status(500).json({error: '请求转发失败'});
        });
});

module.exports = router;
